package presentacion;

import javax.swing.JPanel;
import java.awt.GridBagLayout;
import javax.swing.JScrollPane;
import java.awt.GridBagConstraints;
import javax.swing.JTable;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JButton;
import javax.swing.table.DefaultTableModel;
import javax.swing.JCheckBox;
import javax.swing.SwingConstants;
import javax.swing.JTextPane;

import negocio.DirectorIncidencia;
import negocio.DirectorPresupuesto;
import negocio.DirectorTipoIncidencia;
import negocio.DirectorTipoResolucionIncidencia;
import negocio.TransferDirector;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JComboBox;

public class DirectorPanelIncidencias extends JPanel implements DirectorPanel {
	private JTable table;
	private JButton btnAceptar;
	private JCheckBox chckbxMostrarSoloPendientes;
	private JTextPane textPane;
	
	
	private ArrayList<DirectorIncidencia> listaIncidencias;
	
	private  ArrayList<DirectorTipoIncidencia> listaTipoIncidencias;
	
	//los tipos resolucines los guardamos directamente en el combobox
	private JComboBox comboBox;

	/**
	 * Create the panel.
	 */
	public DirectorPanelIncidencias() {
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{288, 0, 0};
		gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0};
		gridBagLayout.columnWeights = new double[]{1.0, 1.0, Double.MIN_VALUE};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
		setLayout(gridBagLayout);
		
		btnAceptar = new JButton("Aceptar");
		btnAceptar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(table.getSelectedRow()!=-1 && comboBox.getSelectedIndex()!=-1){
					TransferDirector datos=new TransferDirector();
					datos.setAccionIncidenciaResolver(comboBox.getSelectedIndex()+1);
					datos.setIdIncidenciaResolver(listaIncidencias.get(table.getSelectedRow()).getIdIncidencia());
					
					
					SingletonControlador.getInstancia().evento(Evento.DIRECTOR_RESOLVER_INCIDENCIA, datos);
					actualizar();
				}
			}
		});
		btnAceptar.setEnabled(false);
		GridBagConstraints gbc_btnAceptar = new GridBagConstraints();
		gbc_btnAceptar.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnAceptar.insets = new Insets(0, 0, 5, 0);
		gbc_btnAceptar.gridx = 1;
		gbc_btnAceptar.gridy = 0;
		add(btnAceptar, gbc_btnAceptar);
		
		JScrollPane scrollPane = new JScrollPane();
		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
		gbc_scrollPane.gridheight = 6;
		gbc_scrollPane.insets = new Insets(0, 0, 0, 5);
		gbc_scrollPane.fill = GridBagConstraints.BOTH;
		gbc_scrollPane.gridx = 0;
		gbc_scrollPane.gridy = 0;
		add(scrollPane, gbc_scrollPane);
		
		table = new JTable();
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent arg0) {
				if(table.getSelectedRow()!=-1){
					textPane.setText(listaIncidencias.get(table.getSelectedRow()).getDescripcion());
					if(listaIncidencias.get(table.getSelectedRow()).getFechaResolucion()==null){
						btnAceptar.setEnabled(true);
	
					}else{
						btnAceptar.setEnabled(false);
		
					}
				}
			}
		});
		table.setModel(new DefaultTableModel(
			new Object[][] {
				{null, null, null, null},
			},
			new String[] {
				"Tipo", "Resolucion", "Fecha", "Dni alumno"
			}
		) {
			boolean[] columnEditables = new boolean[] {
				false, false, false, false
			};
			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		});
		table.getColumnModel().getColumn(1).setMaxWidth(150);
		table.getColumnModel().getColumn(2).setPreferredWidth(70);
		table.getColumnModel().getColumn(2).setMaxWidth(70);
		table.getColumnModel().getColumn(3).setMaxWidth(75);
		scrollPane.setViewportView(table);
		
		chckbxMostrarSoloPendientes = new JCheckBox("<html><p>Mostrar solo \r\npendientes</p></html>");
		chckbxMostrarSoloPendientes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				actualizar();
			}
		});
		
		comboBox = new JComboBox();
		GridBagConstraints gbc_comboBox = new GridBagConstraints();
		gbc_comboBox.insets = new Insets(0, 0, 5, 0);
		gbc_comboBox.fill = GridBagConstraints.HORIZONTAL;
		gbc_comboBox.gridx = 1;
		gbc_comboBox.gridy = 1;
		add(comboBox, gbc_comboBox);
		GridBagConstraints gbc_chckbxMostrarSoloPendientes = new GridBagConstraints();
		gbc_chckbxMostrarSoloPendientes.fill = GridBagConstraints.BOTH;
		gbc_chckbxMostrarSoloPendientes.insets = new Insets(0, 0, 5, 0);
		gbc_chckbxMostrarSoloPendientes.gridx = 1;
		gbc_chckbxMostrarSoloPendientes.gridy = 3;
		add(chckbxMostrarSoloPendientes, gbc_chckbxMostrarSoloPendientes);
		
		textPane = new JTextPane();
		textPane.setEditable(false);
		GridBagConstraints gbc_textPane = new GridBagConstraints();
		gbc_textPane.fill = GridBagConstraints.BOTH;
		gbc_textPane.gridx = 1;
		gbc_textPane.gridy = 5;
		add(textPane, gbc_textPane);
		actualizar();

	}
	
	
	
	
	
	
	public void actualizar(){
		
		TransferDirector datos=new TransferDirector();
		//Actualziar acciones:
		
		SingletonControlador.getInstancia().evento(Evento.DIRECTOR_GET_TIPOS_RESOLUCION_INCIDENCIAS, datos);
		
		comboBox.removeAllItems();
		
		for(Iterator<DirectorTipoResolucionIncidencia> it=datos.getListaTiposResolucionIncidencia().iterator();it.hasNext();){
			comboBox.addItem(it.next());
			
		}
		
		datos=new TransferDirector();
		SingletonControlador.getInstancia().evento(Evento.DIRECTOR_GET_TIPOS_INCIDENCIAS, datos);
		listaTipoIncidencias=datos.getListaTiposIncidencia(); 
		
		
		
		
		datos=new TransferDirector();
		SingletonControlador.getInstancia().evento(Evento.DIRECTOR_GET_LISTA_INCIDENCIAS, datos);
		
		//Remover datos anteriores.
		while(((DefaultTableModel)table.getModel()).getRowCount()!=0){
			((DefaultTableModel)table.getModel()).removeRow(0);
		}
		
		
		
		
		listaIncidencias=new ArrayList<DirectorIncidencia>();
		
		for(Iterator<DirectorIncidencia> it=datos.getListaIncidencias().iterator();it.hasNext();){
			DirectorIncidencia dp=it.next();
			String tipo=listaTipoIncidencias.get(dp.getTipoIncidencia()-1).getNombre();
			String estado= dp.getFechaResolucion()==null?"Pendiente":((DirectorTipoResolucionIncidencia)comboBox.getItemAt(dp.getTipoResolucionIncidencia()-1)).getNombre();

			if (!chckbxMostrarSoloPendientes.isSelected()||(dp.getFechaResolucion()==null && chckbxMostrarSoloPendientes.isSelected())){
		
				((DefaultTableModel)table.getModel()).addRow(new Object[]{tipo,estado,dp.getFecha(),dp.getCausante()});
				listaIncidencias.add(dp);
			}
		}
		

		
		
		
		
	}

}
